package practice.knowledge;
// Person类
public class Person {
    // 成员变量
    private int age = 0;
    private String name = "noname";
    private char sex = 'M';
    
    // 构造函数（空+所有）
    public Person() {
    }

    public Person(String n, int a, char s) {
        name = n;
        if (a >= 0 && a < 140)
            age = a;// 数据过滤
        else
            age = 0;
        if (s == 'M')
            sex = s; // 数据过滤
        else
            sex = 'F';
    }

    // 方法
    public void introduceme() {
        System.out.println("my name is:" + name + "\tmy age is:" + age);
        if (sex == 'M')
            System.out.println("I amm man!");
        else
            System.out.println("I am woman!");
    }

    public int getAge() {
        return age;
    }

    public void setAge(int a) {// 注意数据过滤
        if (a >= 0 && a < 140)
            age = a;
        else
            age = 0;
    }

    public String getName() {
        return name;
    }

    public void setName(String n) {
        name = n;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char s) {// 注意数据过滤
        if (s == 'M')
            sex = 'M';
        else
            sex = 'F';
    }

    public boolean equals(Person a) {
        /*equals 是 String 类的一个方法，用来比较两个字符串的内容是否相等
        它与 == 不同，== 比较的是对象引用是否相等，而 equals 比较的是对象
        内容是否相等 */
        if (this.name.equals(a.name) && this.age == a.age
                && this.sex == a.sex)
            return true;
        else
            return false;
    }

    public String toString() {// 返回当前对象的字符串表示
        return name + "," + sex + "," + age;
    }
}

// PersonTest类
class PersonTest {
    public static void main(String args[]) {
        Person p1, p2;// 声明了两个Person类型的变量
        p1 = new Person("张三", 28, 'M');// 使用带参构造函数创建p1对象
        p2 = new Person();//创建一个默认的对象p2
        p2.setName("陈红");//设置p2对象内容
        p2.setAge(38);
        p2.setSex('F');
        p1.introduceme();//调用p1的方法
        p2.introduceme();
    }

}
